{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# 07.04 - TENSORFLOW"]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["endpoint https://m5knaekxo6.execute-api.us-west-2.amazonaws.com/dev-v0001/rlxmooc\n"]}, {"data": {"text/html": ["

See my courses and progress

"], "text/plain": [""]}, "execution_count": 1, "metadata": {}, "output_type": "execute_result"}], "source": ["!wget --no-cache -O init.py -q https://raw.githubusercontent.com/rramosp/ai4eng.v1/main/content/init.py\n", "import init; init.init(force_download=False); init.get_weblink()"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["import numpy as np\n", "import matplotlib.pyplot as plt\n", "from local.lib import mlutils\n", "from IPython.display import Image\n", "\n", "try:\n", " %tensorflow_version 2.x\n", " print (\"Using TF2 in Google Colab\")\n", "except:\n", " pass\n", "\n", "import tensorflow as tf\n", "%matplotlib inline"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## A dataset (again)"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/plain": [""]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}, {"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["## KEEPOUTPUT\n", "from sklearn.datasets import make_moons\n", "X,y = make_moons(300, noise=.15)\n", "plt.scatter(X[:,0][y==0], X[:,1][y==0], color=\"blue\", label=\"class 0\", alpha=.5)\n", "plt.scatter(X[:,0][y==1], X[:,1][y==1], color=\"red\", label=\"class 1\", alpha=.5)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## A neural network in tensorflow, 4 neurons in the hidden layer, 1 output"]}, {"cell_type": "code", "execution_count": 170, "metadata": {}, "outputs": [], "source": ["model = tf.keras.Sequential([\n", " tf.keras.layers.Dense(4, activation='tanh'),\n", " tf.keras.layers.Dense(1, activation='sigmoid')\n", "])\n", "model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=.5),\n", " loss=tf.keras.losses.BinaryCrossentropy(from_logits=False),metrics=['accuracy'])"]}, {"cell_type": "code", "execution_count": 171, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Epoch 1/10\n", "300/300 [==============================] - 0s 480us/step - loss: 0.4007 - accuracy: 0.8267\n", "Epoch 2/10\n", "300/300 [==============================] - 0s 478us/step - loss: 0.3605 - accuracy: 0.8467\n", "Epoch 3/10\n", "300/300 [==============================] - 0s 469us/step - loss: 0.2444 - accuracy: 0.8900\n", "Epoch 4/10\n", "300/300 [==============================] - 0s 473us/step - loss: 0.1709 - accuracy: 0.9467\n", "Epoch 5/10\n", "300/300 [==============================] - 0s 470us/step - loss: 0.1837 - accuracy: 0.9467\n", "Epoch 6/10\n", "300/300 [==============================] - 0s 455us/step - loss: 0.1485 - accuracy: 0.9600\n", "Epoch 7/10\n", "300/300 [==============================] - 0s 467us/step - loss: 0.1072 - accuracy: 0.9633\n", "Epoch 8/10\n", "300/300 [==============================] - 0s 456us/step - loss: 0.0981 - accuracy: 0.9667\n", "Epoch 9/10\n", "300/300 [==============================] - 0s 472us/step - loss: 0.1252 - accuracy: 0.9600\n", "Epoch 10/10\n", "300/300 [==============================] - 0s 465us/step - loss: 0.1253 - accuracy: 0.9633\n"]}, {"data": {"text/plain": [""]}, "execution_count": 171, "metadata": {}, "output_type": "execute_result"}], "source": ["## KEEPOUTPUT\n", "model.fit(X,y, epochs=10, batch_size=1)"]}, {"cell_type": "code", "execution_count": 173, "metadata": {}, "outputs": [{"data": {"text/plain": ["(0.5318, 0.4682)"]}, "execution_count": 173, "metadata": {}, "output_type": "execute_result"}, {"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["## KEEPOUTPUT\n", "predict = lambda X: (model.predict(X)[:,0]>.5).astype(int)\n", "mlutils.plot_2Ddata_with_boundary(predict, X, y)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## A bigger network\n", "\n", "- different activation functions\n", "- different optimizer"]}, {"cell_type": "code", "execution_count": 215, "metadata": {}, "outputs": [], "source": ["model = tf.keras.Sequential([\n", " tf.keras.layers.Dense(20, activation='tanh'),\n", " tf.keras.layers.Dense(50, activation='relu'),\n", " tf.keras.layers.Dense(1, activation='sigmoid')\n", "])\n", "model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=.01),\n", " loss=tf.keras.losses.BinaryCrossentropy(from_logits=False),metrics=['accuracy'])"]}, {"cell_type": "code", "execution_count": 216, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Epoch 1/10\n", "300/300 [==============================] - 0s 510us/step - loss: 0.3400 - accuracy: 0.8567\n", "Epoch 2/10\n", "300/300 [==============================] - 0s 508us/step - loss: 0.2804 - accuracy: 0.8867\n", "Epoch 3/10\n", "300/300 [==============================] - 0s 487us/step - loss: 0.2450 - accuracy: 0.8967\n", "Epoch 4/10\n", "300/300 [==============================] - 0s 532us/step - loss: 0.1722 - accuracy: 0.9433\n", "Epoch 5/10\n", "300/300 [==============================] - 0s 516us/step - loss: 0.1660 - accuracy: 0.9500\n", "Epoch 6/10\n", "300/300 [==============================] - 0s 527us/step - loss: 0.0917 - accuracy: 0.9700\n", "Epoch 7/10\n", "300/300 [==============================] - 0s 516us/step - loss: 0.1127 - accuracy: 0.9667\n", "Epoch 8/10\n", "300/300 [==============================] - 0s 507us/step - loss: 0.1118 - accuracy: 0.9600\n", "Epoch 9/10\n", "300/300 [==============================] - 0s 526us/step - loss: 0.1076 - accuracy: 0.9500\n", "Epoch 10/10\n", "300/300 [==============================] - 0s 487us/step - loss: 0.0840 - accuracy: 0.9800\n"]}, {"data": {"text/plain": [""]}, "execution_count": 216, "metadata": {}, "output_type": "execute_result"}], "source": ["## KEEPOUTPUT\n", "model.fit(X,y, epochs=10, batch_size=1)"]}, {"cell_type": "code", "execution_count": 217, "metadata": {}, "outputs": [{"data": {"text/plain": ["(0.522575, 0.477425)"]}, "execution_count": 217, "metadata": {}, "output_type": "execute_result"}, {"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["## KEEPOUTPUT\n", "predict = lambda X: (model.predict(X)[:,0]>.5).astype(int)\n", "mlutils.plot_2Ddata_with_boundary(predict, X, y)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Cross entropy - multiclass classification\n", "\n", "follow [THIS EXAMPLE](https://www.tensorflow.org/tutorials/keras/classification) in TensorFlow doc site. Observe that:\n", "\n", "- labels corresponding to a 10-class classification problem\n", "- the network contains 10 output neurons, one per output class\n", "- the loss function is `SparseCategoricalCrossEntropy`\n", "\n", "Observe how **cross entropy** works with 4 classes:\n", "\n", "- first we convert the output to a one-hot encoding\n", "- we create a network with two output neurons with sigmoid activation\n", "- interpret each neuron's output as elements of a probability distribution\n", "- normalize the probability distribution (must add up to one)\n", "- we consider network output is better when it yields more probability to the correct class"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**expected classes for five data points**"]}, {"cell_type": "code", "execution_count": 239, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([3, 1, 2, 0, 3])"]}, "execution_count": 239, "metadata": {}, "output_type": "execute_result"}], "source": ["## KEEPOUTPUT\n", "y = np.random.randint(4, size=5)\n", "y"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**convert it to one hot encoding**"]}, {"cell_type": "code", "execution_count": 240, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[0, 0, 0, 1],\n", " [0, 1, 0, 0],\n", " [0, 0, 1, 0],\n", " [1, 0, 0, 0],\n", " [0, 0, 0, 1]])"]}, "execution_count": 240, "metadata": {}, "output_type": "execute_result"}], "source": ["## KEEPOUTPUT\n", "y_ohe = np.eye(4)[y].astype(int)\n", "y_ohe"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**simulate some neural network output with NO ACTIVATION function**\n", "\n", "with 10 output neurons, so for each input element (we have five) we have 4 outputs.\n", "\n", "this is called **LOGITS** in Tensorflow"]}, {"cell_type": "code", "execution_count": 241, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[ 0.06, -0.31, -0.95, 0.39],\n", " [ 0.92, -0.48, -0.08, 0.53],\n", " [-0.5 , 0.22, -0.18, 1.81],\n", " [-0.49, -1.41, 0.09, -0.11],\n", " [-0.73, 0.26, -1.63, -0.68]])"]}, "execution_count": 241, "metadata": {}, "output_type": "execute_result"}], "source": ["## KEEPOUTPUT\n", "y_hat = np.round(np.random.normal(size=y_ohe.shape), 2)\n", "y_hat"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**normalize LOGITS**. This is the **SOFTMAX function**\n", "\n", "**LOGITS** obtained from network last layer with no activation\n", "\n", "$$\\hat{\\mathbf{y}}^{(i)} = [\\hat{y}^{(i)}_0, \\hat{y}^{(i)}_1,...,\\hat{y}^{(i)}_9]$$\n", "\n", "**SOFTMAX ACTIVATION**\n", "\n", "$$\\hat{\\bar{\\mathbf{y}}}^{(i)} = [\\hat{\\bar{y}}^{(i)}_0, \\hat{\\bar{y}}^{(i)}_1,...,\\hat{\\bar{y}}^{(i)}_9]$$\n", "\n", "with \n", "\n", "$$\\hat{\\bar{y}}^{(i)}_k = \\frac{e^{\\hat{y}^{(i)}_k}}{\\sum_{j=0}^9e^{\\hat{y}^{(i)}_j}}$$\n", "\n", "\n", "this ensures:\n", "\n", "- $\\sum_{k=0}^9 \\hat{\\bar{y}}^{(i)}_k=1$\n", "- $0 \\le \\hat{\\bar{y}}^{(i)}_k \\le 1$\n", "\n", "this way, for each input we have a nice probability distribution in its outputs.\n", "\n", "This is implemented in **Tensorflow**"]}, {"cell_type": "code", "execution_count": 242, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[0.29019814, 0.20044982, 0.10569567, 0.40365637],\n", " [0.43638904, 0.10761221, 0.16053855, 0.2954602 ],\n", " [0.06893706, 0.14162659, 0.09493514, 0.69450122],\n", " [0.21519991, 0.08576126, 0.38435531, 0.31468351],\n", " [0.19420963, 0.52266365, 0.07895974, 0.20416697]])"]}, "execution_count": 242, "metadata": {}, "output_type": "execute_result"}], "source": ["## KEEPOUTPUT\n", "y_hatb = tf.nn.softmax(y_hat).numpy()\n", "y_hatb"]}, {"cell_type": "markdown", "metadata": {}, "source": ["check sums"]}, {"cell_type": "code", "execution_count": 243, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([1., 1., 1., 1., 1.])"]}, "execution_count": 243, "metadata": {}, "output_type": "execute_result"}], "source": ["## KEEPOUTPUT\n", "y_hatb.sum(axis=1)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["how would you now measure how closely `y_hatb` is to the expected output on `y_ohe`?\n", "\n", "**cross entropy**: just take the probability assigned to the correct class (and pass it through a log function)\n", "\n", "$$\\text{loss}(\\bar{\\mathbf{y}}^{(i)}, \\hat{\\bar{\\mathbf{y}}}^{(i)}) = -\\sum_{k=0}^9 \\bar{y}^{(i)}_k\\log(\\hat{\\bar{y}}^{(i)}_k)$$\n", "\n", "where $\\bar{\\mathbf{y}}^{(i)}$ is the one-hot encoding of the expected class (label) for data point $i$.\n", "\n", "observe that, \n", "\n", "- in the one-hot encoding $\\bar{\\mathbf{y}}^{(i)}$ only one of the elements will be 1, and the rest will be 0's, so the sumation above is only taking the log of the probability of the correct label.\n", "- the negative sign accounts for logs of values <1 are negative and we will later want to **minimize** the loss\n", "\n", "This is implemented in **Tensorflow**"]}, {"cell_type": "code", "execution_count": 253, "metadata": {}, "outputs": [{"data": {"text/plain": [""]}, "execution_count": 253, "metadata": {}, "output_type": "execute_result"}], "source": ["## KEEPOUTPUT\n", "tf.keras.losses.categorical_crossentropy(y_ohe, y_hatb)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Observe that TensorFlow also implements the corresponding **sparse** convenience function that works directly with our labels"]}, {"cell_type": "code", "execution_count": 261, "metadata": {}, "outputs": [{"data": {"text/plain": [""]}, "execution_count": 261, "metadata": {}, "output_type": "execute_result"}], "source": ["## KEEPOUTPUT\n", "tf.keras.losses.sparse_categorical_crossentropy(y, y_hatb)"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": []}], "metadata": {"kernelspec": {"display_name": "p38", "language": "python", "name": "p38"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3"}}, "nbformat": 4, "nbformat_minor": 4}